package com.woniuxy.carlife.service;

import com.woniuxy.carlife.domain.ServiceInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.carlife.dto.ServiceInfoDto;
import com.woniuxy.carlife.param.ServiceInfoPicParam;
import com.woniuxy.carlife.param.ServiceInfoParam;
import com.woniuxy.carlife.param.UserLikeServiceParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author fx
 * @ClassName:ServiceInfoService
 * @Description: 服务详情service接口
 * @date 2021/4/6 20:00
 **/

public interface ServiceInfoService extends IService<ServiceInfo> {

    /**
     * 功能描述〈添加 服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 11:02
     * @throws
     */
    boolean saveServiceInfo(ServiceInfoParam serviceInfo) throws IOException;

    /**
     * 功能描述〈上传服务图标〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/13 4:17
     * @throws
     */
    String saveServiceInfoIcon(MultipartFile serviceIcon) throws IOException;

    /**
     * 功能描述〈上传服务详情图片〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/13 4:21
     * @throws
     */
    String saveServiceInfoPic(List<MultipartFile> infoPic) throws IOException;

    /**
     * 功能描述〈根据门店id查看 服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:04
     * @throws
     */
    List<ServiceInfoDto> findServiceInfoByStoreId(Integer storeId);

    /**
     * 功能描述〈根据门店id获得已上架的服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:04
     * @throws
     */
    List<ServiceInfoDto> findServcieInfoByStoreIdAndAlreadyUp(Integer storeId);

    /**
     * 功能描述〈根据门店id查询营业中的服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:08
     * @throws
     */
    List<ServiceInfoDto> findServcieInfoByStoreIdAndDoing(Integer storeId);

    /**
     * 功能描述〈根据门店id查询未营业的服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:09
     * @throws
     */
    List<ServiceInfoDto> findServcieInfoByStoreIdAndNotDoing(Integer storeId);

    /**
     * 功能描述〈根据服务id查询指定服务详情〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:05
     * @throws
     */
    ServiceInfoDto findServcieInfoByServiceInfoId(Integer infoId);

    /**
     * 功能描述〈根据服务id增加服务收藏量redis〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:05
     * @throws
     */
    Boolean updateUpServcieInfoCollectByServiceInfoIdToRedis(Integer infoId);
    
    /**
     * 功能描述〈根据服务id减少收藏量redis〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:06
     * @throws
     */
    Boolean updateDownServcieInfoCollectByServiceInfoIdToRedis(Integer infoId);

    /**
     * 功能描述〈根据服务id增加点赞量redis〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:06
     * @throws
     */
    Boolean updateUpServcieInfoLikeByServiceInfoIdToRedis(UserLikeServiceParam like);

//    /**
//     * 功能描述〈根据服务id减少点赞量redis〉
//     * @author:fx
//     * @param: @param null:
//     * @return:
//     * @Date 2021/4/12 12:06
//     * @throws
//     */
//    Boolean updateDownServcieInfoLikeByServiceInfoIdToRedis(Integer infoId);

    /**
     * 功能描述〈根据服务id修改服务状态为营业中〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:06
     * @throws
     */
    Boolean updateServiceInfoStatusToDoing(Integer infoId);

    /**
     * 功能描述〈根据服务id修改服务状态为未营业〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:07
     * @throws
     */
    Boolean updateServiceInfoStatusToNotDoing(Integer infoId);

    /**
     * 功能描述〈下架服务〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:10
     * @throws
     */
    Boolean updateServiceInfoStatusToDown(Integer infoId);

    /**
     * 功能描述〈修改收藏量到数据库〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/12 12:10
     * @throws
     */
    Boolean updateServcieInfoCollectByServiceInfoIdToSql();

    /**
     * 功能描述〈修改服务图片〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/14 16:55
     * @throws
     */
    Boolean updateServiceInfoIcon(ServiceInfoPicParam picParam);

    /**
     * 功能描述〈修改服务详情图片〉
     * @author:fx
     * @param: @param null:
     * @return:
     * @Date 2021/4/14 16:56
     * @throws
     */
    Boolean updateServiceInfoPic(ServiceInfoPicParam picParam);

    /**
     * 功能描述〈修改销量redis〉
     * @author:fx
     * @param: @调用订单接口，传回订单数据
     * @return: 
     * @Date 2021/4/12 13:36
     * @throws 
     */
    Boolean updateServcieInfoSaleByServiceInfoIdToRedis();

}
